#include "loaderthread.h"

using namespace XVL;

LoaderThread::LoaderThread(SafeQueue* queue, QObject *parent)
    : AbstractThread(queue, parent)
{}

LoaderThread::~LoaderThread()
{}

void LoaderThread::setImagePath(const QString& path)
{
    QMutexLocker locker(&pauseMutex_);

    // 获取图片文件列表
    QDir dir(path);
    QStringList filters("*.JPEG");
    QFileInfoList files = dir.entryInfoList(filters, QDir::Files);

    if (files.isEmpty())
    {
        emit errorOccurred("未找到JPEG图片");
        return;
    }

    imageFiles_.clear();
    for (const auto& file : files)
    {
        imageFiles_.append(file.filePath());
    }
    totalCount_ = imageFiles_.size();
    emit totalCountUpdated(totalCount_);
    currentIndex_ = 0;
}

void LoaderThread::run()
{
    // 重置停止标志
    resetstopFlag();
    // 循环执行
    while (!shouldStop())
    {
        // 检查并等待暂停状态解除
        checkAndWaitRemovePause();
        // 获取当前图片路径
        QString imagePath = imageFiles_[currentIndex_];
        currentIndex_++;
        if (currentIndex_ >= totalCount_)
        {
            resetProcessCount();
        }

        // 加载图片
        QImage image(imagePath);
        if (image.isNull())
        {
            emit errorOccurred("无法加载图片: " + imagePath);
            continue;
        }
        // 将图片添加到安全队列
        bool isAdd = getQueue()->enqueue(image);
        // 第一次运行程序时，添加一个图片就暂停
        if(isFirst_ || getManual())
        {
            pauseProcessing();
            if(isFirst_)
            {
                isFirst_ = false;
            }
            setManual(false);
        }

        if (!isAdd || shouldStop())
        {
            break;
        }
        // 与处理线程都延时10ms
        msleep(10);
    }
}
